/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.util.List;
import org.cip.esymons.eventos.bc.AsistenciaDelegate;
import org.cip.esymons.eventos.be.AsistenciaAlumno;
import org.cip.esymons.eventos.be.AsistenciaParticipante;
import java.util.ArrayList;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.cip.esymons.eventos.bc.AsistenciaAlumnoDelegate;
import org.cip.esymons.eventos.bc.PreEventoDelegate;
import org.cip.esymons.eventos.be.Preevento;

/**
 *
 * @author lizardor
 */
public class AsistenciaController {

    AsistenciaAlumnoDelegate delegadoAsistenciaAlumno;
    AsistenciaDelegate delegadoAsistenciaParticipante;
    AsistenciaAlumno asistenciaAlumno;
    AsistenciaParticipante asistenciaParticipante;
    List<AsistenciaAlumno> listaAsistenciaAlumnos;
    List<AsistenciaParticipante> listaAsistenciaParticipantes;
    Integer eveCodigo=1;
    boolean tipoAsistencia;
    Date fecha = new Date();
    Boolean ocultar;
    
    public AsistenciaController() {
        inicializar();
    }

    public void inicializar() {
        asistenciaAlumno = new AsistenciaAlumno();
        asistenciaParticipante = new AsistenciaParticipante();
        listaAsistenciaAlumnos = new ArrayList<AsistenciaAlumno>();
        listaAsistenciaParticipantes = new ArrayList<AsistenciaParticipante>();
        listaAsistenciaParticipantes = null;
        delegadoAsistenciaParticipante = new AsistenciaDelegate();
        delegadoAsistenciaAlumno = new AsistenciaAlumnoDelegate();
        eveCodigo=1;
        fecha = new Date();
        ocultar = false;
        //listar_Todos();
        getListaAsistenciaAlumnos();
        getListaAsistenciaParticipantes();
        //listarAsistencias();
    }

    //<editor-fold defaultstate="collapsed" desc="Gets y Sets">

    public AsistenciaAlumno getAsistenciaAlumno() {
        return asistenciaAlumno;
    }

    public void setAsistenciaAlumno(AsistenciaAlumno asistenciaAlumno) {
        this.asistenciaAlumno = asistenciaAlumno;
    }

    public AsistenciaParticipante getAsistenciaParticipante() {
        return asistenciaParticipante;
    }

    public void setAsistenciaParticipante(AsistenciaParticipante asistenciaParticipante) {
        this.asistenciaParticipante = asistenciaParticipante;
    }

    public List<AsistenciaAlumno> getListaAsistenciaAlumnos() {
        listarAsistenciaAlumno();
        return listaAsistenciaAlumnos;
    }

    public void setListaAsistenciaAlumnos(List<AsistenciaAlumno> listaAsistenciaAlumnos) {
        this.listaAsistenciaAlumnos = listaAsistenciaAlumnos;
    }

    public List<AsistenciaParticipante> getListaAsistenciaParticipantes() {
        listarAsistenciaParticipante();
        return listaAsistenciaParticipantes;
    }

    public void setListaAsistenciaParticipantes(List<AsistenciaParticipante> listaAsistenciaParticipantes) {
        this.listaAsistenciaParticipantes = listaAsistenciaParticipantes;
    }

    public AsistenciaAlumnoDelegate getDelegadoAsistenciaAlumno() {
        return delegadoAsistenciaAlumno;
    }

    public void setDelegadoAsistenciaAlumno(AsistenciaAlumnoDelegate delegadoAsistenciaAlumno) {
        this.delegadoAsistenciaAlumno = delegadoAsistenciaAlumno;
    }

    public AsistenciaDelegate getDelegadoAsistenciaParticipante() {
        return delegadoAsistenciaParticipante;
    }

    public void setDelegadoAsistenciaParticipante(AsistenciaDelegate delegadoAsistenciaParticipante) {
        this.delegadoAsistenciaParticipante = delegadoAsistenciaParticipante;
    }

    public Integer getEveCodigo() {
        return eveCodigo;
    }

    public void setEveCodigo(Integer eveCodigo) {
        this.eveCodigo = eveCodigo;
    }

    public boolean getTipoAsistencia() {
        return tipoAsistencia;
    }

    public void setTipoAsistencia(boolean tipoAsistencia) {
        this.tipoAsistencia = tipoAsistencia;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public Boolean getOcultar() {
        return ocultar;
    }

    public void setOcultar(Boolean ocultar) {
        this.ocultar = ocultar;
    }

    
    
    // // </editor-fold>

    public String listar_Todos() {
        try {
            eveCodigo = (eveCodigo != null) ? eveCodigo : 0;
            listaAsistenciaAlumnos = delegadoAsistenciaAlumno.listaAsistenciaAlumno2(eveCodigo);
        } catch (Exception e) {
            listaAsistenciaAlumnos = new ArrayList<AsistenciaAlumno>();
        }
        //cancelar();
        return null;
    }

    public String listarAsistencias() {
        try {
            Preevento pre = new Preevento();
            PreEventoDelegate delegadoPreEventoDelegate = new PreEventoDelegate();
            //eveCodigo = (eveCodigo != null) ? eveCodigo : 0;
            System.out.println("evento codigo "+eveCodigo);
            pre = delegadoPreEventoDelegate.findID(eveCodigo);
            if (pre != null) {
                System.out.println("tipo evento: " + pre.getPreTipo());
                tipoAsistencia = (pre.getPreTipo().compareTo("EV") == 0) ? false : true;
                if (!tipoAsistencia) {
                    //participantes del evento
                    listaAsistenciaParticipantes = new ArrayList<AsistenciaParticipante>();
                    listaAsistenciaParticipantes = delegadoAsistenciaParticipante.listaAsistenciaParticipante2(eveCodigo);
                    System.out.println("--lista participantes="+listaAsistenciaParticipantes.size());
                } else {
                    //alumnos del curso
                    listaAsistenciaAlumnos = new ArrayList<AsistenciaAlumno>();
                    listaAsistenciaAlumnos = delegadoAsistenciaAlumno.listaAsistenciaAlumno2(eveCodigo);
                    System.out.println("--lista alumnos="+listaAsistenciaAlumnos.size());
                }
            } else {
                mostrarMensaje("Error", "No hay datos que mostrar!", FacesMessage.SEVERITY_ERROR);
            }
            pre = null;
            delegadoPreEventoDelegate = null;
        } catch (Exception ex) {
            mostrarMensaje("Error", "No se puede listar las asistencias", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    //lizardo estuvo aqui
    public String listarAsistenciaAlumno() {
        try {
            fecha = (fecha != null) ? fecha : new Date();
            eveCodigo = (eveCodigo != null) ? eveCodigo : 0;
            listaAsistenciaAlumnos = delegadoAsistenciaAlumno.listarAsistenciaAlumno(eveCodigo, fecha);
            if (listaAsistenciaAlumnos.size()>0) {
                ocultar = true;
            } else {
                ocultar = false;
                //mostrarMensaje("WARN: ", "No hay inscritos en este curso", FacesMessage.SEVERITY_WARN);
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "En listar las asistencias de los alumnos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    //lizardo estuvo aqui
    public String listarAsistenciaParticipante() {
        try {
            eveCodigo = (eveCodigo != null) ? eveCodigo : 0;
            listaAsistenciaParticipantes = new ArrayList<AsistenciaParticipante>();
            listaAsistenciaParticipantes = delegadoAsistenciaParticipante.listaAsistenciaParticipante2(eveCodigo);
            if (listaAsistenciaParticipantes.size()>0) {
                ocultar = false;
            } else {
                ocultar = true;
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "En listar las asistencias de los participantes", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String guardarAsistenciasAlumno() {
        try {
            delegadoAsistenciaAlumno.guardarAsistencias(listaAsistenciaAlumnos);
            mostrarMensaje("INFO: ", "Se guardaron las asistencias con exito", FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al guardar las asistencias de los alumnos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String eliminarAsistencia() {
        try {
            System.out.println("tipo asistencia: " + tipoAsistencia);
            if (tipoAsistencia) {
                asistenciaAlumno.setAsiEstado(5);
                delegadoAsistenciaAlumno.actualizar(asistenciaAlumno);
                //delegadoAsistenciaAlumno.eliminar(asistenciaAlumno);
            } else {
                //asistenciaParticipante.setAspEstado(false);
                //delegadoAsistenciaParticipante.actualizar(asistenciaParticipante);
                delegadoAsistenciaParticipante.eliminar(asistenciaParticipante);
            }
            listarAsistencias();
        } catch (Exception ex) {
            mostrarMensaje("Error", "No se puede eliminar la asistencia", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        inicializar();
        return null;
    }

    public String cancelar() {
        asistenciaAlumno = new AsistenciaAlumno();
        asistenciaParticipante = new AsistenciaParticipante();
        listaAsistenciaAlumnos = new ArrayList<AsistenciaAlumno>();
        listaAsistenciaParticipantes = new ArrayList<AsistenciaParticipante>();
        inicializar();
        return null;
    }

    //combos
    public SelectItem[] getComboEventos2() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            List<Preevento> listaEvento = delegadoPreevento.listaEventos();

            selects = new SelectItem[listaEvento.size()];
            int cont = 0;
            boolean ban = true;
            for (Preevento preevento : listaEvento) {
                if (ban) {
                    preevento.setNroCaracteres(35);
                    ban = false;
                }
                SelectItem item = new SelectItem(preevento.getPreCodigo(), preevento.getPreNombreCorto());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen eventos");
            selects[0] = item;
            return selects;
        }
    }

    public SelectItem[] getComboEventos() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            List<Preevento> listaEvento = delegadoPreevento.listaEventosConCurso();

            selects = new SelectItem[listaEvento.size()];
            int cont = 0;
            boolean ban = true;
            for (Preevento preevento : listaEvento) {
                if (ban) {
                    preevento.setNroCaracteres(35);
                    ban = false;
                }
                SelectItem item = new SelectItem(preevento.getPreCodigo(), preevento.getPreNombreCorto());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen eventos");
            selects[0] = item;
            return selects;
        }
    }

    public SelectItem[] getComboEventosSinCurso() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            List<Preevento> listaEvento = delegadoPreevento.listaEventosSinCurso();
            selects = new SelectItem[listaEvento.size()];
            int cont = 0;
            boolean ban = true;
            for (Preevento preevento : listaEvento) {
                if (ban) {
                    preevento.setNroCaracteres(35);
                    ban = false;
                }
                SelectItem item = new SelectItem(preevento.getPreCodigo(), preevento.getPreNombreCorto());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen eventos");
            selects[0] = item;
            return selects;
        }
    }

    public SelectItem[] getComboEventosConCurso() {
        try {
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            List<Preevento> listaEvento = delegadoPreevento.listaEventosConCurso();
            selects = new SelectItem[listaEvento.size()];
            int cont = 0;
            boolean ban = true;
            for (Preevento preevento : listaEvento) {
                if (ban) {
                    preevento.setNroCaracteres(35);
                    ban = false;
                }
                SelectItem item = new SelectItem(preevento.getPreCodigo(), preevento.getPreNombreCorto());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen eventos");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }
}
